{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# LASSO回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model.base import LinearRegression\n",
    "from sklearn.metrics.scorer import mean_squared_error\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing.data import PolynomialFeatures\n",
    "from sklearn.preprocessing.data import StandardScaler\n",
    "from sklearn.model_selection._split import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108cf1908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "x = np.random.uniform(-3., 3. , size=100)\n",
    "X = x.reshape(-1,1)\n",
    "y = 0.5 * x + 3 + np.random.normal(0,1,size=100)\n",
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def PolynomialRegression(degree):\n",
    "    return Pipeline(\n",
    "        [\n",
    "            ('poly', PolynomialFeatures(degree=degree)),\n",
    "            ('std_scaler', StandardScaler()),\n",
    "            ('lin_reg',LinearRegression())\n",
    "        ]\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把数据集分为训练集和测试集\n",
    "np.random.seed(666)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/seamonster/MachineLearningClassicAlgorithmEnv/lib/python3.6/site-packages/scipy/linalg/basic.py:1226: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n  warnings.warn(mesg, RuntimeWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "167.94010863221607"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "poly_reg = PolynomialRegression(degree=20)\n",
    "poly_reg.fit(X_train, y_train)\n",
    "\n",
    "y_poly_predict = poly_reg.predict(X_test)\n",
    "# 可以看到均方误差会很大\n",
    "mean_squared_error(y_test, y_poly_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108d804e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 把拟合的曲线画出来\n",
    "X_plot = np.linspace(-3,3,100).reshape(100,1)\n",
    "y_plot = poly_reg.predict(X_plot)\n",
    "\n",
    "plt.scatter(x,y)\n",
    "plt.plot(X_plot[:,0], y_plot, color='r')\n",
    "plt.axis([-3,3,0,6])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把画图抽出来作为一个方法\n",
    "def plot_model(model):\n",
    "    X_plot = np.linspace(-3,3,100).reshape(100,1)\n",
    "    y_plot = model.predict(X_plot)\n",
    "\n",
    "    plt.scatter(x,y)\n",
    "    plt.plot(X_plot[:,0], y_plot, color='r')\n",
    "    plt.axis([-3,3,0,6])\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用LASSO回归应对过拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model.coordinate_descent import Lasso\n",
    "\n",
    "# 封装一个使用LASSO回归的管道\n",
    "def LassoRegression(degree, alpha):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('lasso_reg',Lasso(alpha=alpha))\n",
    "    ])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### α取0.01"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.1496080843259964"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用Lasso回归后的（对测试集的）均方误差是多少呢？\n",
    "lasso1_reg =LassoRegression(20, 0.01)\n",
    "lasso1_reg.fit(X_train, y_train)\n",
    "\n",
    "y1_predict = lasso1_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y1_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108efa240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_model(lasso1_reg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### α取0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.1213911351818648"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lasso2_reg =LassoRegression(20, 0.1)\n",
    "lasso2_reg.fit(X_train, y_train)\n",
    "\n",
    "y2_predict = lasso2_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y2_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1098e8080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_model(lasso2_reg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "已经接近是一条直线了"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### α取1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.8408939659515595"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lasso3_reg =LassoRegression(20, 1)\n",
    "lasso3_reg.fit(X_train, y_train)\n",
    "\n",
    "y3_predict = lasso3_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y3_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109940400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_model(lasso3_reg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "已经相当接近是一条平行的直线了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
